Apache Flink এ Time Windows স্ট্রিম প্রসেসিংয়ের একটি গুরুত্বপূর্ণ অংশ, যা ডেটা স্ট্রিমকে নির্দিষ্ট সময়ের ইন্টারভালে বিভক্ত করে প্রসেস করতে সহায়তা করে। Flink এ তিনটি প্রধান ধরনের উইন্ডো রয়েছে: Tumbling Windows, Sliding Windows, এবং Session Windows। এদের প্রত্যেকটি ভিন্ন ধরণের ডেটা প্রসেসিং কেসের জন্য ব্যবহৃত হয়।
1. Tumbling Windows
Tumbling Windows হল স্থির দৈর্ঘ্যের উইন্ডো যা ওভারল্যাপ ছাড়াই একটির পর একটি নির্দিষ্ট সময়ের পরপর তৈরি হয়। Tumbling উইন্ডো একটি নির্দিষ্ট সময় পরিসরে সমস্ত ডেটা সংগ্রহ করে এবং তারপর সেই উইন্ডো বন্ধ হয় ও প্রসেসিং হয়। নতুন উইন্ডো শুরু হওয়ার আগে পুরোনো উইন্ডো সম্পূর্ণরূপে বন্ধ হয়।
- ব্যবহার ক্ষেত্র: যখন নির্দিষ্ট সময়ের ভিত্তিতে ডেটা সংগ্রহ করতে চান, যেমন প্রতি ৫ সেকেন্ডে একবার।
- উদাহরণ: প্রতি মিনিটে মোট বিক্রয় পরিমাণ গণনা করা।
DataStream<Tuple2<String, Integer>> windowCounts = input
.keyBy(value -> value.f0)
.window(TumblingEventTimeWindows.of(Time.seconds(5)))
.sum(1);
উপরের উদাহরণে, TumblingEventTimeWindows.of(Time.seconds(5)) প্রতি ৫ সেকেন্ডের জন্য একটি উইন্ডো তৈরি করে।
2. Sliding Windows
Sliding Windows Tumbling Windows এর মতই কাজ করে, তবে এটি স্থির দৈর্ঘ্যের উইন্ডো যা ওভারল্যাপ করে। Sliding Windows এর দুটি প্যারামিটার থাকে: উইন্ডোর দৈর্ঘ্য এবং উইন্ডোর স্লাইড ইন্টারভাল। উইন্ডোর স্লাইড ইন্টারভাল যদি উইন্ডোর দৈর্ঘ্যের চেয়ে ছোট হয়, তবে উইন্ডোগুলি একে অপরকে ওভারল্যাপ করে। এটি একটি ইভেন্ট একাধিক উইন্ডোতে অন্তর্ভুক্ত হতে দেয়।
- ব্যবহার ক্ষেত্র: যখন ডেটা বিশ্লেষণের জন্য কিছু ওভারল্যাপ প্রয়োজন, যেমন প্রতি ৫ সেকেন্ডে একবার ১ মিনিটের উইন্ডোতে ডেটা সংগ্রহ করা।
- উদাহরণ: প্রতি মিনিটের মধ্যে প্রতি ১০ সেকেন্ডে মোট বিক্রয় পরিমাণ গণনা করা।
DataStream<Tuple2<String, Integer>> windowCounts = input
.keyBy(value -> value.f0)
.window(SlidingEventTimeWindows.of(Time.minutes(1), Time.seconds(10)))
.sum(1);
এই উদাহরণে, উইন্ডো প্রতি ১ মিনিটের জন্য তৈরি হয়, এবং প্রতি ১০ সেকেন্ডে স্লাইড করে। ফলে, একাধিক উইন্ডো একে অপরকে ওভারল্যাপ করবে।
3. Session Windows
Session Windows হল ডেটা স্ট্রিমে সেশন শনাক্ত করার জন্য ব্যবহৃত হয়। এটি স্ট্রিমের মধ্যে ইভেন্টগুলির মধ্যে inactivity gap বা নির্দিষ্ট সময়ের বিরতি (gap) এর উপর ভিত্তি করে উইন্ডো তৈরি করে। যদি একটি নির্দিষ্ট সময়ের মধ্যে কোনো ইভেন্ট না ঘটে, তবে উইন্ডোটি বন্ধ হয় এবং একটি নতুন সেশন শুরু হয়।
- ব্যবহার ক্ষেত্র: সেশন ভিত্তিক বিশ্লেষণের জন্য, যেমন একটি ব্যবহারকারীর কার্যকলাপ পর্যবেক্ষণ করা যেখানে সেশনটি তখনই শেষ হয় যখন ব্যবহারকারী নির্দিষ্ট সময়ের মধ্যে কোনো কার্যকলাপ করে না।
- উদাহরণ: একটি ওয়েবসাইটে প্রতিটি ব্যবহারকারীর কার্যকলাপের সেশন গণনা করা, যেখানে সেশন শেষ হয় যদি ব্যবহারকারী ৩০ সেকেন্ডের মধ্যে কোনো কার্যকলাপ না করে।
DataStream<Tuple2<String, Integer>> windowCounts = input
.keyBy(value -> value.f0)
.window(ProcessingTimeSessionWindows.withGap(Time.seconds(30)))
.sum(1);
এই উদাহরণে, ProcessingTimeSessionWindows.withGap(Time.seconds(30)) একটি সেশন উইন্ডো তৈরি করে, যা তখনই বন্ধ হবে যদি ৩০ সেকেন্ডের মধ্যে কোনো নতুন ইভেন্ট না ঘটে।
সংক্ষেপে
- Tumbling Window: একটি নির্দিষ্ট দৈর্ঘ্যের উইন্ডো যা ওভারল্যাপ করে না।
- Sliding Window: একটি নির্দিষ্ট দৈর্ঘ্যের উইন্ডো যা স্লাইডিং ইন্টারভালের ভিত্তিতে ওভারল্যাপ করতে পারে।
- Session Window: ইভেন্টগুলির মধ্যে নির্দিষ্ট সময়ের বিরতির উপর ভিত্তি করে উইন্ডো তৈরি হয়, যা সেশন শনাক্ত করতে ব্যবহৃত হয়।
Flink এর Time Windows ব্যবহার করে আপনি বিভিন্ন ধরণের ডেটা এনালাইসিস করতে পারেন, যেমন রিয়েল-টাইম এনালাইসিস, ব্যাচ প্রসেসিং, এবং সেশন ভিত্তিক এনালাইসিস।
Read more